package com.example.demo.程序员面试金典;

/**
 * @author：zzc
 * @date: 2022/9/7
 */
public class 判定是否互为字符重排 {

    //给定两个字符串 s1 和 s2，请编写一个程序，确定其中一个字符串的字符重新排列后，能否变成另一个字符串。
    //
    //示例 1：
    //
    //输入: s1 = "abc", s2 = "bca"
    //输出: true
    //示例 2：
    //
    //输入: s1 = "abc", s2 = "bad"
    //输出: false

    //方法一：
    //
    //使用哈希表作为字符计数器，O(n) 时间内解决。
    //
    //方法二：
    //
    //按照字符编码重新排序字符串，再检查两者一致性。
    class Solution {
        //todo
        public boolean CheckPermutation(String s1, String s2) {
            int n1 = s1.length();
            int n2 = s2.length();
            if (n1 != n2) {
                return false;
            }
            int[] counter = new int[128];
            for (int i = 0; i < n1; ++i) {
                ++counter[s1.charAt(i)];
                --counter[s2.charAt(i)];
            }
            for (int v : counter) {
                if (v != 0) {
                    return false;
                }
            }
            return true;
        }


    }

}
